#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <gmp.h>

int main(){

   int amostra=100000; // // tamanho da amostra
   int i,aux4;
   int pontos=0; // numeros de pontos que estao dentro do circulo
   double pi;    // nesse caso o raio sra igual a distancia 
   mpf_t x,y,random,aux1, aux2,aux3,raio;

   //definindo a precisao
   mpf_set_default_prec(100000);

   mpf_init(x);
   mpf_init(y);
   mpf_init(random);
   mpf_init(aux1);
   mpf_init(aux2);
   mpf_init(aux3);
   mpf_init(raio);
   
   srand (time(NULL));

   for(i=0;i<amostra;i++){
                         
        // gera valor de x
	mpf_init_set_d(random,rand());
	mpf_div_ui(x,random,RAND_MAX);
		
	// gera valor de y
	mpf_init_set_d(random,rand());
	mpf_div_ui(y,random,RAND_MAX);

	//calculando a distancia
	mpf_mul(aux1,x,x);
    	mpf_mul(aux2,y,y);
	mpf_add(aux3,aux1,aux2);
    	mpf_sqrt(raio,aux3);
         
	aux4 = mpf_cmp_ui(raio, 1);
        if(aux4 <= 0)
               pontos++;  
                                                
   }
    
   pi = (4* (double)pontos) / (double)amostra;
   
   printf("pi: %g\n",pi);

   mpf_clear(x);
   mpf_clear(y);
   mpf_clear(random);
   mpf_clear(aux1);
   mpf_clear(aux2);
   mpf_clear(aux3);
   mpf_clear(raio);
   
   return 0;  
}
